package linlist;

public class Tester2{

  public static LinearList2.Knoten vorlauf(LinearList2.Knoten n, StringBuffer sb){
    if(n==null) sb.append("____");
    else{
      sb.append(n.data.toString());
      while(n.next!=null){
        n=n.next;
        sb.append(">"+n.data);
      }
    }
    return n;
  }

  public static LinearList2.Knoten ruecklauf(LinearList2.Knoten n, StringBuffer sb){
    if(n==null) sb.insert(0, "____");
    else{
      sb.insert(0, n.data.toString());
      while(n.prev!=null){
        n=n.prev;
        sb.insert(0, n.data+"<");
      }
    }
    return n;
  }

  public static void anzeige(String s){
    System.out.println(s);
    if(lili.head==null && lili.tail==null) s=".... leere Liste ....";
    else{
      s=(lili.head==null || lili.tail==null)?
        "FEHLER: es darf nicht start oder end alleine null sein!\n":"";
      StringBuffer sb1=new StringBuffer();
      StringBuffer sb2=new StringBuffer();
      LinearList2.Knoten n=ruecklauf(lili.tail, sb1);
      sb1.append(" <-> ");
      LinearList2.Knoten m=vorlauf(lili.head, sb1);
      sb1.insert(0, n==lili.head?".... ":"!!.. ");
      sb1.append(m==lili.tail?" ....\n":" ..!!\n");
      s+=sb1;
      sb1=new StringBuffer();
      //darunter hoffentlich das gleiche nochmal
      n=vorlauf(n, sb1);// der Vorlauf nach dem Rücklauf
      sb1.append(" >-< ");
      m=ruecklauf(m, sb2);// der Rücklauf nach dem Vorlauf
      sb1.append(sb2);
      s=s+"     "+sb1;
    }
    System.out.println(s);
  }

  public static LinearList2 lili;
  public static void main(String[] args){
    lili=new LinearList2();
    anzeige("leer");
    lili.insert("A", 0);
    anzeige("einziges Element A");
    lili.delete(0);
    anzeige("A wieder gelöscht");
    lili.insert("B", 0);
    lili.insert("C", 1);
    anzeige("B und C dazu");
    lili.delete(1);
    anzeige("C wieder weg");
    lili.insert("D", 0);
    anzeige("D vorne eingefügt");
  }
}
